#指定生成的文件名
OJB_OUT = test

#指定每一个c文件对应的.o文件
OBJS = cJSON.o TCP.o shmem.o 

#指定编译器
CC = gcc

#指定需要的库
ULDFLAGS = -lpthread -lm -lsqlite3 


all:$(OJB_OUT)

$(OJB_OUT):$(OBJS)
	$(CC) -o $@ $^ $(ULDFLAGS)

dep_files := $(foreach f,$(OBJS),.$(f).d)
dep_files := $(wildcard $(dep_files))

ifneq ($(dep_files),)
  include $(dep_files)
endif

%.o:%.c
	$(CC) -Wp,-MD,.$@.d -c $< -o $@
    
clean:
	rm -rf .*.o.d *.o $(OJB_OUT)








# # 指定生成的可执行文件名（保持原有）
# OJB_OUT = test

# # 指定所有 .c 文件对应的 .o 文件（TCP.o 已包含，无需新增！）
# # TCP.c 现在包含历史记录核心逻辑（数据库+线程+TCP发送），无需额外加文件
# OBJS = cJSON.o TCP.o shmem.o 

# # 指定编译器
# CC = gcc

# # 编译选项：新增警告、调试信息，确保头文件路径正确（若需要）
# # -Wall：显示所有警告（避免历史记录逻辑隐藏语法错误）
# # -g：生成调试信息（方便定位历史记录功能的问题）
# # -I.：若头文件（如shmem.h、cJSON.h）在当前目录，可加此选项（可选）
# CFLAGS = -Wall -g -I.

# # 指定需要链接的库（原有已满足历史记录需求：线程+数学库+数据库）
# ULDFLAGS = -lpthread -lm -lsqlite3 

# # 默认目标：编译生成可执行文件
# all: $(OJB_OUT)

# # 链接阶段：将所有 .o 文件（含 TCP.o）链接成可执行文件
# $(OJB_OUT): $(OBJS)
# 	$(CC) -o $@ $^ $(ULDFLAGS)  # $^ 包含所有 OBJS，包括 TCP.o

# # 自动生成依赖文件（处理头文件依赖，如 TCP.c 包含 shmem.h 时，修改 shmem.h 会自动重编 TCP.o）
# dep_files := $(foreach f,$(OBJS),.$(f).d)
# dep_files := $(wildcard $(dep_files))

# ifneq ($(dep_files),)
#   include $(dep_files)
# endif

# # 编译阶段：将 .c 文件编译成 .o 文件（含 TCP.c）
# %.o: %.c
# 	$(CC) $(CFLAGS) -Wp,-MD,.$@.d -c $< -o $@  # 自动生成依赖，编译 TCP.c 时带警告和调试信息

# # 清理编译产物（保持原有）
# clean:
# 	rm -rf .*.o.d *.o $(OJB_OUT)